#include <raylib.h>
#include <stdlib.h>

// 全局字体变量，只需要加载一次
Font chineseFont = {0};

// 加载中文字体
bool LoadChineseFont(const char *fontPath, float fontSize, const char *sampleText)
{
    // 如果字体已经加载，先卸载
    if (chineseFont.texture.id != 0)
    {
        UnloadFont(chineseFont);
    }

    // 加载字体文件数据
    int fileSize = 0;
    unsigned char *fontFileData = LoadFileData(fontPath, &fileSize);
    if (!fontFileData)
    {
        TraceLog(LOG_ERROR, "无法加载字体文件: %s", fontPath);
        return false;
    }

    // 提取需要的字符集
    int codepointsCount = 0;
    int *codepoints = LoadCodepoints(sampleText, &codepointsCount);
    if (!codepoints || codepointsCount == 0)
    {
        TraceLog(LOG_ERROR, "无法提取字符集");
        UnloadFileData(fontFileData);
        return false;
    }

    // 从内存加载字体
    chineseFont = LoadFontFromMemory(".ttf", fontFileData, fileSize, fontSize, codepoints, codepointsCount);
    
    // 清理临时资源
    UnloadCodepoints(codepoints);
    UnloadFileData(fontFileData);

    // 检查字体是否加载成功
    if (chineseFont.texture.id == 0)
    {
        TraceLog(LOG_ERROR, "字体加载失败");
        return false;
    }

    return true;
}

// 绘制中文文本
void DrawChineseText(const char *text, Vector2 position, float fontSize, Color color)
{
    // 检查字体是否有效
    if (chineseFont.texture.id == 0)
    {
        TraceLog(LOG_WARNING, "字体未加载，无法绘制文本");
        return;
    }
    
    DrawTextEx(chineseFont, text, position, fontSize, 2, color);
}

int main()
{
    // 初始化窗口
    InitWindow(800, 600, "Raylib 绘制中文示例");
    SetTargetFPS(60);

    // 需要显示的中文字符（确保包含所有可能用到的字符）
    const char *chineseText = "好家伙，这是一个Raylib中文显示示例！";
    
    // 加载字体（根据你的实际路径调整）
    bool fontLoaded = LoadChineseFont("../assets/cct.ttf", 32, chineseText);

    // 主循环
    while (!WindowShouldClose())
    {
        BeginDrawing();
        ClearBackground(RAYWHITE);

        if (fontLoaded)
        {
            // 绘制中文文本
            DrawChineseText(chineseText, (Vector2){50, 50}, 32, BLACK);
            DrawChineseText("成功！", (Vector2){50, 100}, 24, RED);
        }
        else
        {
            // 显示错误信息
            DrawText("无法加载中文字体", 50, 50, 20, RED);
        }

        EndDrawing();
    }

    // 清理资源
    if (chineseFont.texture.id != 0)
    {
        UnloadFont(chineseFont);
    }
    CloseWindow();
    
    return 0;
}
